package com.manage.cloud.utils;

import cn.hutool.core.util.StrUtil;

import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;

/**
 * 专属于 web 包的工具类
 *
 * @author 芋道源码
 */
public class WebFrameworkUtils {

    private static final String REQUEST_ATTRIBUTE_LOGIN_USER_ID = "login_user_id";
    private static final String REQUEST_ATTRIBUTE_LOGIN_USER_TYPE = "login_user_type";

    private static final String REQUEST_ATTRIBUTE_COMMON_RESULT = "common_result";

    public static final String HEADER_TENANT_ID = "tenant-id";

//    private static WebProperties properties;
//
//    public WebFrameworkUtils(WebProperties webProperties) {
//        WebFrameworkUtils.properties = webProperties;
//    }

    /**
     * 获得租户编号，从 header 中
     * 考虑到其它 framework 组件也会使用到租户编号，所以不得不放在 WebFrameworkUtils 统一提供
     *
     * @param request 请求
     * @return 租户编号
     */
    public static Long getTenantId(HttpServletRequest request) {
        String tenantId = request.getHeader(HEADER_TENANT_ID);
        return StrUtil.isNotEmpty(tenantId) ? Long.valueOf(tenantId) : null;
    }

    public static void setLoginUserId(ServletRequest request, Long userId) {
        request.setAttribute(REQUEST_ATTRIBUTE_LOGIN_USER_ID, userId);
    }

    /**
     * 设置用户类型
     *
     * @param request  请求
     * @param userType 用户类型
     */
    public static void setLoginUserType(ServletRequest request, Integer userType) {
        request.setAttribute(REQUEST_ATTRIBUTE_LOGIN_USER_TYPE, userType);
    }
//
//    /**
//     * 获得当前用户的编号，从请求中
//     * 注意：该方法仅限于 framework 框架使用！！！
//     *
//     * @param request 请求
//     * @return 用户编号
//     */
//    public static Long getLoginUserId(HttpServletRequest request) {
//        if (request == null) {
//            return null;
//        }
//        return (Long) request.getAttribute(REQUEST_ATTRIBUTE_LOGIN_USER_ID);
//    }
//
//    public static Integer getLoginUserType() {
//        HttpServletRequest request = getRequest();
//        return getLoginUserType(request);
//    }
//
//    public static Long getLoginUserId() {
//        HttpServletRequest request = getRequest();
//        return getLoginUserId(request);
//    }
//
//    public static void setCommonResult(ServletRequest request, CommonResult<?> result) {
//        request.setAttribute(REQUEST_ATTRIBUTE_COMMON_RESULT, result);
//    }
//
//    public static CommonResult<?> getCommonResult(ServletRequest request) {
//        return (CommonResult<?>) request.getAttribute(REQUEST_ATTRIBUTE_COMMON_RESULT);
//    }
//
//    public static HttpServletRequest getRequest() {
//        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
//        if (!(requestAttributes instanceof ServletRequestAttributes)) {
//            return null;
//        }
//        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) requestAttributes;
//        return servletRequestAttributes.getRequest();
//    }

}
